#include<bits/stdc++.h> 
using namespace std;
//	洗牌是一种把一组牌打乱的行为，因为标准的洗牌技术比较简单且容易暗箱操作，所以会产生不
//	充分的洗牌。很多赌场采用自动洗牌机，我的任务就是模拟自动洗牌。程序需要根据给定的随机
//	顺序和重复洗牌次数，把一组54张牌洗掉。初始状态我们认为是
//	S1, S2,...,S13,   H1, H2,...,H13,   C1, C2,...,C13,   D1, D2,...,D13,   J1, J2
//	分别表示黑桃红心草花方片小丑。假设我们有S3,H5, C1, D13和J2，给定顺序{4，2，5，3，1}，
//	则洗牌一次得到J2, H5, D13, S3, C1，再一次得到C1, H5, S3, J2, D13 
//1.每个输入都有一个测试用例，对于每个测试用例第一行包括一个正整数K≤20，表示重复次数。
//	然后给定一个次序。
//2.对于每一个测试用例，输出洗牌结果。
//3.数组操作
int orders[55];	//存储需要用的序列 
string cards[55];	//存储牌的顺序情况 
void init(){	//初始化牌堆 
	for(int i = 1;i<=13;i++){
		stringstream ss;
		ss<<i;
		cards[i] = "S" + ss.str();
	}
	for(int i = 14;i<=26;i++){
		stringstream ss;
		ss<<i-13;
		cards[i] = "H" + ss.str();
	}
	for(int i = 27;i<=39;i++){
		stringstream ss;
		ss<<i-26;
		cards[i] = "C" + ss.str();
	}
	for(int i = 40;i<=52;i++){
		stringstream ss;
		ss<<i-39;
		cards[i] = "D" + ss.str();
	}
	cards[53] = "J1";
	cards[54] = "J2";
}
void shuffling(){	//打乱 
	string tmp[55];
	for(int i = 1;i<=54;i++){
		tmp[orders[i]] = cards[i];
	}
	for(int i = 1;i<=54;i++){
		cards[i] = tmp[i];
	}
}
int main(){
	int N;
	cin>>N;
	init();
	for(int i = 1;i<=54;i++) cin>>orders[i];
	for(int i = 0;i<N;i++) shuffling();
	for(int i = 1;i<=53;i++) cout<<cards[i]<<" ";
	cout<<cards[54]<<endl;
	return 0;
} 